#pragma once
#include <iostream>
#include <time.h>
#include <pthread.h>

using namespace std;

#define INF 0   //普通
#define DBG 1   //调试
#define ERR 2   //错误
#define St DBG  //判断标准
//宏函数  只进行替换不属于调用
//__VA_ARGS__表示多参数列表 而在前面加上##之后表示传入参数可能为空或者只有一个参数。避免传入参数1个时报错
#define LOG(level, er, ...) do{\
    if(level < St) break; \
    time_t t;\
    time(&t);\
    struct tm* timeS = localtime(&t);\
    char tmp[32];\
    sprintf(tmp, "%2d:%2d:%2d", timeS->tm_hour, timeS->tm_min, timeS->tm_sec);\
    fprintf(stdout, "[时间：%s %s -%d -%p] " er "\n", tmp, __FILE__, __LINE__, pthread_self(), ##__VA_ARGS__);\
}while(0)
//__FILE__表示定位该关键字__FILE__在哪个文件下被使用。__LINE__表示该关键字在哪一行被使用

#define ILOG(er, ...) LOG(INF, er, ##__VA_ARGS__);  //提供几种日志的分类接口函数，
#define DLOG(er, ...) LOG(DBG, er, ##__VA_ARGS__);
#define ELOG(er, ...) LOG(ERR, er, ##__VA_ARGS__);

